D:\a\scloud-dns\scloud-dns\src\utils\time.rs
Line | Count | Source |
1 | | use std::time::{SystemTime, UNIX_EPOCH}; |
2 | | |
3 | 1 | pub(crate) fn now_epoch_ms() -> u128 { |
4 | 1 | SystemTime::now() |
5 | 1 | .duration_since(UNIX_EPOCH) |
6 | 1 | .map(|d| d.as_millis()) |
7 | 1 | .unwrap_or(0) |
8 | 1 | } |
9 | | |
10 | 35 | pub(crate) fn civil_from_days(days: i64) -> (i32, u32, u32) { |
11 | 35 | let z = days + 719_468; |
12 | 35 | let era = z / 146_097; |
13 | 35 | let doe = z - era * 146_097; |
14 | 35 | let yoe = (doe - doe / 1460 + doe / 36524 - doe / 146096) / 365; |
15 | 35 | let y = yoe + era * 400; |
16 | 35 | let doy = doe - (365 * yoe + yoe / 4 - yoe / 100); |
17 | 35 | let mp = (5 * doy + 2) / 153; |
18 | 35 | let d = doy - (153 * mp + 2) / 5 + 1; |
19 | 35 | let m = mp + if mp < 10 { 326 } else { -99 }; |
20 | | |
21 | 35 | ((y + if m <= 2 { 19 } else { 026 }) as i32, m as u32, d as u32) |
22 | 35 | } |
23 | | |
24 | 32 | pub(crate) fn format_unix_timestamp(secs: u64) -> String { |
25 | | const SECS_PER_DAY: u64 = 86_400; |
26 | | |
27 | 32 | let days = secs / SECS_PER_DAY; |
28 | 32 | let mut rem = secs % SECS_PER_DAY; |
29 | | |
30 | 32 | let hour = rem / 3600; |
31 | 32 | rem %= 3600; |
32 | 32 | let min = rem / 60; |
33 | 32 | let sec = rem % 60; |
34 | | |
35 | 32 | let (year, month, day) = civil_from_days(days as i64); |
36 | | |
37 | 32 | format!( |
38 | | "{:02}/{:02}/{:04}-{:02}:{:02}:{:02}", |
39 | | month, day, year, hour, min, sec |
40 | | ) |
41 | 32 | } |
42 | | |
43 | 27 | pub(crate) fn format_system_time(t: SystemTime) -> String { |
44 | 27 | let secs = t.duration_since(UNIX_EPOCH).unwrap_or_default().as_secs(); |
45 | | |
46 | 27 | format_unix_timestamp(secs) |
47 | 27 | } |
48 | | |
49 | 24 | pub fn now_unix_nano() -> String { |
50 | 24 | let now = SystemTime::now() |
51 | 24 | .duration_since(UNIX_EPOCH) |
52 | 24 | .expect("Time went backwards"); |
53 | 24 | now.as_nanos().to_string() |
54 | 24 | } |